import TaskConstants, {
	call
} from '../../taskManager/common';
import constant from '@/utils/constant';
import moment from 'moment';
/* 根据时间、任务类型，统计类型查询任务量 */
export function queryCommon(vueObj, param, type) {
	let actualChars = vueObj.$echarts.init(document.getElementById('my-chart-Bar-number')); //实际完成件数
	let workStatisChars = vueObj.$echarts.init(document.getElementById('my-chart-Bar-comparison')); //实际完成件数
	actualChars.clear();
	workStatisChars.clear();
	let doc = document.getElementById('my-chart-Pie-prescription')
	doc.removeAttribute("_echarts_instance_");
	let achRateBarChars = vueObj.$echarts.init(doc); //时效达成率
	achRateBarChars.clear();
	let endCount = document.getElementById('dayEndCount'); //完成任务数
	let reachRate = document.getElementById('reachRate'); //达成差异率
	let dayEndgrowth = document.getElementById('dayEndgrowth'); //历史完成同比
	let allCount = document.getElementById('dayAllCount'); //受理总任务数
	let dayAllgrowth = document.getElementById('dayAllgrowth'); //历史受理同比
	let allTasks = 0; //总任务数
	let hisEndTasks = 0;
	let hisAllTasks = 0;
	let endTasks = 0; //完成任务数
	let allgrowRate = 0; //总任务同比
	let endgrowRate = 0; //完成任务同比
	let achRate = document.getElementById('dayachRate'); //达成率
	let series = [];
	let _enddata = [];
	let _hisEndData = [];
	let _exaxis = [];
	let _hisExaxis = [];

	let _workStatisdata = [];
	let _workStatisxaxis = [];
	show(vueObj);
	call(TaskConstants.apis.queryCommon, param, "POST").then(result => {
		if (result.resultCode == constant.SUCCESS && result.data) {
			let data = result.data;
			allTasks = data.allCount;
			endTasks = data.endCount;
			hisEndTasks = data.hisEndCount;
			hisAllTasks = data.hisAllCount;
			let endList = data.endList;
			let hisEndList = data.hisEndList;
			let workStatisList = data.workStatisList;
			for (let k in endList) {
				let item = endList[k];
				_enddata.push(item.count);
				let itemTime = item.fineTime;
				if (type == '时') {
					itemTime = itemTime.substr(11, 13);
				} else if (type == '日') {
					itemTime = itemTime.substr(8, 10);
				} else {
					itemTime = itemTime.substr(5, 7);
				}
				_exaxis.push(itemTime + type);
			}
			/* 历史数据 */
			for (let k in hisEndList) {
				let item = hisEndList[k];
				_hisEndData.push(item.count);
				let itemTime = item.fineTime;
				if (type == '时') {
					itemTime = itemTime.substr(11, 13);
				} else if (type == '日') {
					itemTime = itemTime.substr(8, 10);
				} else {
					itemTime = itemTime.substr(5, 7);
				}
				_hisExaxis.push(itemTime + type);
			}
			if (type == '时') {
				series = series1(_enddata, null);
			} else {
				series = series1(_enddata, _hisEndData);
			}
			let option;
			if (_enddata.length == 0) {
				option = defaultDraw();
			} else {
				option = oneChartOption("人工核保处理件数", _exaxis, series, "time");
			}

			if (type != '时') {
				option.legend = {
					show: true,
					type: 'scroll',
					right: '20px',
					data: ['历史完成件数', '实际完成件数']
				};
			}
			actualChars.setOption(option, true);
			for (let k in workStatisList) {
				let item = workStatisList[k];
				if (item.name == 'system' || item.name == "" || item.name == null) {
					continue;
				}
				_workStatisdata.push(item.count);
				_workStatisxaxis.push(item.name);
			}
			series = series2(_workStatisdata);
			if (_workStatisdata.length == 0) {
				option = defaultDraw();
			} else {
				option = oneChartOption("人工工作量统计", _workStatisxaxis, series, 'workStatis');
			}
			workStatisChars.setOption(option, true);

			allCount.innerHTML = allTasks;
			endCount.innerHTML = endTasks;
			let rate = 0;
			if (allTasks != 0) {
				rate = endTasks / allTasks;
			}
			if (rate != 0) {
				rate = (rate * 100).toFixed(2);
			}
			let tmpRate = rate - data.reachRate;
			if (tmpRate >= 0) {
				reachRate.style.color = '#94bd61';
			} else {
				reachRate.style.color = '#ff0000';
			}
			reachRate.innerHTML = tmpRate.toFixed(2) + '%';
			let dat = [{
				value: rate,
				name: '达成率',
				splitNumber: 5
			}];
			achRate.innerHTML = rate + '%';
			//算同比
			if (type != '时') {
				if (hisAllTasks == 0) {
					hisAllTasks = 1;
					dayAllgrowth.setAttribute("class", "textColorGreen");
					dayAllgrowth.innerHTML = up() + ((allTasks / hisAllTasks) * 100).toFixed(2) + '%';
				} else {
					if (allTasks > hisAllTasks) {
						dayAllgrowth.setAttribute("class", "textColorGreen");
						dayAllgrowth.innerHTML = up() + ((allTasks / hisAllTasks) * 100).toFixed(2) + '%';
					} else {
						dayAllgrowth.setAttribute("class", "textColorRed");
						dayAllgrowth.innerHTML = down() + ((allTasks / hisAllTasks) * 100).toFixed(2) + '%';
					}
				}
				if (hisEndTasks == 0) {
					hisEndTasks = 1;
					dayEndgrowth.setAttribute("class", "textColorGreen");
					dayEndgrowth.innerHTML = up() + ((endTasks / hisEndTasks) * 100).toFixed(2) + '%';
				} else {
					if (allTasks > hisAllTasks) {
						dayEndgrowth.setAttribute("class", "textColorGreen");
						dayEndgrowth.innerHTML = up() + ((endTasks / hisEndTasks) * 100).toFixed(2) + '%';
					} else {
						dayEndgrowth.setAttribute("class", "textColorRed");
						dayEndgrowth.innerHTML = down() + ((endTasks / hisEndTasks) * 100).toFixed(2) + '%';
					}
				}
			}
			var achOption = achRateOption(dat, reachRate.style.color);
			achOption.series[0].axisLine.lineStyle.color[0][0] = rate / 100;
			achRateBarChars.setOption(achOption, true);
		}
		cancle(vueObj);
	}).catch(err => {
		cancle(vueObj);
	});

}

function up() {
	return '<i class="el-icon-top"></i>';
}

function down() {
	return '<i class="el-icon-bottom"></i>';
}

function show(vue) {
	vue.$store.dispatch('loading/CHANGE_LOADING', true);
};

function cancle(vue) {
	vue.$store.dispatch('loading/CHANGE_LOADING', false)
};
//人工完成数据
function oneChartOption(title, etimeInte, series, type) {
	return {
		tooltip: {
			trigger: 'axis',
			position: function(pt) {
				return [pt[0], '10%'];
			},
			formatter: function(params) {
				let name = params[0].name;
				let value = params[0].value;
				let str;
				if (type == 'time') {
					str = name + " 完成 " + value + "个任务"
				}
				if (type == 'workStatis') {
					str = name + " 该时间段工作量为： " + value + "个任务"
				}
				return str;
			}
		},
		title: {
			show: false,
		},
		legend: {
			show: false,
		},
		toolbox: {
			show: true,
			orient: 'horizontal',
			x: 'right',
			y: 'top',
			showTitle: false
		},
		xAxis: [{
			type: 'category',
			data: etimeInte,
			axisLabel: {
				interval: 0,
				rotate: 40
			}
		}],
		yAxis: { // 纵轴标尺固定
			type: 'value',
			min: 0,
			name: '数量',
			minInterval: 1,
			splitLine: { //网格线
				show: true,
				lineStyle: {
					type: 'dotted' //设置网格线类型 dotted：虚线  solid:实线
				},
			},
			axisLine: {
				lineStyle: {
					color: '#BFBFBF', //设置Y轴颜色
				}
			},
			axisLabel: { //坐标轴刻度标签的相关设置
				textStyle: {
					color: '#666',
					formatter: '{value} 件'
				}
			},
			boundaryGap: [0.2, 0.2]
		},
		series: series
	};
}
/* 人工核保处理series */
function series1(data, hisData) {
	return [{
			name: '实际完成件数',
			type: 'bar',
			barGap: 2,
			smooth: false,
			symbol: 'none',
			barWidth: 20,
			itemStyle: {
				normal: {
					color: '#f76767',
				}
			},
			data: data
		},
		{
			name: hisData == null ? '实际完成件数' : "历史实际完成件数",
			type: 'line',
			barWidth: 20,
			barGap: 2,
			smooth: true,
			symbol: 'none',
			sampling: 'average',
			itemStyle: {
				normal: {
					color: hisData == null ? '#f76767' : '#e1e100',
					areaStyle: {
						opacity: 0 //隐藏阴影
					},
					lineStyle: {
						width: 2
					},

				}
			},
			data: hisData == null ? data : hisData
		},
	]
}
/* 人员工作量 */
function series2(data) {
	return [{
			name: '实际完成件数',
			type: 'bar',
			barWidth: 20,
			barGap: 2,
			smooth: true,
			symbol: 'none',
			sampling: 'average',
			itemStyle: {
				normal: {
					color: '#7bc7c8',
				}
			},
			data: data,
			markLine: {
				type: 'line',
				symbol: "none",
				label: {
					formatter: function(params) {
						return params.name + " " + params.value + "个";
					},
					textStyle: {
						fontSize: '12',
						fontWeight: 'bold',
						color: '#000'
					}
				},
				data: [{
					type: 'average',
					name: '平均值',
					lineStyle: {
						normal: {
							color: "#ffff3c",
							width: 2,
							type: "solid",
						}

					}
				}]
			}
		},

	]
}
/* 左侧仪表盘 */
function achRateOption(data, color) {
	return {
		tooltip: {
			show: false,
		},
		series: [
			
			{
				name: "达成率", // 系列名称,用于tooltip的显示，legend 的图例筛选，在 setOption 更新数据和配置项时用于指定对应的系列。
				type: "gauge", // 系列类型
				radius: "75%", // 参数:number, string。 仪表盘半径,默认 75% ，可以是相对于容器高宽中较小的一项的一半的百分比，也可以是绝对的数值。
				center: ["43%", "55%"], // 仪表盘位置(圆心坐标)
				startAngle: 180, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度，正上方为90度，正左手侧为180度。
				endAngle: 0, // 仪表盘结束角度,默认 -45
				clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
				min: 0, // 最小的数据值,默认 0 。映射到 minAngle。
				max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
				splitNumber: 50, // 仪表盘刻度的分割段数,默认 10。

				axisLine: { // 仪表盘轴线(轮廓线)相关配置。
					show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
					lineStyle: { // 仪表盘轴线样式。
						width: 30, //轴线宽度,默认 30。
						color: [
							[0.98, 'rgba(255,0,0,0)'],
							[1, 'rgba(59, 217, 41, 0)']
						],
					}
				},
				splitLine: { // 分隔线样式。
					show: false, // 是否显示分隔线,默认 true。
					length: 30, // 分隔线线长。支持相对半径的百分比,默认 30。
					lineStyle: { // 分隔线样式。
						color: "#eee", //线的颜色,默认 #eee。
						opacity: 1, //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
						width: 2, //线度,默认 2。
						type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
						shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
						shadowColor: "#fff", //阴影颜色。支持的格式同color。
					}
				},
				axisTick: { // 刻度(线)样式。
					show: false, // 是否显示刻度(线),默认 true。
					splitNumber: 2, // 分隔线之间分割的刻度数,默认 5。
					length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
					lineStyle: { // 刻度线样式。	
						color: "#eee", //线的颜色,默认 #eee。
						opacity: 1, //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
						width: 1, //线度,默认 1。
						type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
						shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
						shadowColor: "#fff", //阴影颜色。支持的格式同color。
					},
				},
				axisLabel: { // 刻度标签。
					show: true, // 是否显示标签,默认 true。
					distance: 25, // 标签与刻度线的距离,默认 5。
					color: "#550000", // 文字的颜色,默认 #fff。
					fontSize: 12, // 文字的字体大小,默认 5。
					formatter: function(value){
						console.log(value);
						if(value ==98){
							return value+'%';
						}
						return "";
					}, // 刻度标签的内容格式器，支持字符串模板和回调函数两种形式。 示例:// 使用字符串模板，模板变量为刻度默认标签 {value},如:formatter: '{value} kg'; // 使用函数模板，函数参数分别为刻度数值,如formatter: function (value) {return value + 'km/h';}
					lineHeight: 0,
					padding:[0,-80,0,0], 
				},
				pointer: { // 仪表盘指针。
					show: true, // 是否显示指针,默认 true。
					length: "70%", // 指针长度，可以是绝对数值，也可以是相对于半径的百分比,默认 80%。
					width: 5, // 指针宽度,默认 8。
				},
				itemStyle: { // 仪表盘指针样式。
					color: color, // 指针颜色，默认(auto)取数值所在的区间的颜色
					opacity: 1, // 图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
					borderWidth: 0, // 描边线宽,默认 0。为 0 时无描边。
					borderType: "solid", // 柱条的描边类型，默认为实线，支持 'solid', 'dashed', 'dotted'。
					borderColor: "#000", // 图形的描边颜色,默认 "#000"。支持的颜色格式同 color，不支持回调函数。
					shadowBlur: 10, // (发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
					shadowColor: "auto", // 阴影颜色。支持的格式同color。
				},
				title: { // 仪表盘标题。
					show: true, // 是否显示标题,默认 true。
					offsetCenter: [0, "20%"], //相对于仪表盘中心的偏移位置，数组第一项是水平方向的偏移，第二项是垂直方向的偏移。可以是绝对的数值，也可以是相对于仪表盘半径的百分比。
					color: "#fff", // 文字的颜色,默认 #333。
					fontSize: 20, // 文字的字体大小,默认 15。
				},
				detail: { // 仪表盘详情，用于显示数据。
					show: true, // 是否显示详情,默认 true。
					offsetCenter: [0, "50%"], // 相对于仪表盘中心的偏移位置，数组第一项是水平方向的偏移，第二项是垂直方向的偏移。可以是绝对的数值，也可以是相对于仪表盘半径的百分比。
					color: color, // 文字的颜色,默认 auto。
					fontSize: 30, // 文字的字体大小,默认 15。
					formatter: "{value}%", // 格式化函数或者字符串
				},
				data: data
			},
			{
				name: "达成率", // 系列名称,用于tooltip的显示，legend 的图例筛选，在 setOption 更新数据和配置项时用于指定对应的系列。
				type: "gauge", // 系列类型
				radius: "75%", // 参数:number, string。 仪表盘半径,默认 75% ，可以是相对于容器高宽中较小的一项的一半的百分比，也可以是绝对的数值。
				center: ["43%", "55%"], // 仪表盘位置(圆心坐标)
				startAngle: 180, // 仪表盘起始角度,默认 225。圆心 正右手侧为0度，正上方为90度，正左手侧为180度。
				endAngle: 0, // 仪表盘结束角度,默认 -45
				clockwise: true, // 仪表盘刻度是否是顺时针增长,默认 true。
				min: 0, // 最小的数据值,默认 0 。映射到 minAngle。
				max: 100, // 最大的数据值,默认 100 。映射到 maxAngle。
				splitNumber: 10, // 仪表盘刻度的分割段数,默认 10。
				axisLine: { // 仪表盘轴线(轮廓线)相关配置。
					show: true, // 是否显示仪表盘轴线(轮廓线),默认 true。
					lineStyle: { // 仪表盘轴线样式。
						color: [
							[0.98, 'rgba(255,0,0,0.8)'],
							[1, 'rgba(148, 189, 97, 0.8)']
						],
						opacity: 1, //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
						width: 30, //轴线宽度,默认 30。
						shadowBlur: 20, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
						shadowColor: "#fff", //阴影颜色。支持的格式同color。
					}
				},
				
				splitLine: { // 分隔线样式。
					show: true, // 是否显示分隔线,默认 true。
					length: 30, // 分隔线线长。支持相对半径的百分比,默认 30。
					lineStyle: { // 分隔线样式。
						color: "#eee", //线的颜色,默认 #eee。
						opacity: 1, //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
						width: 2, //线度,默认 2。
						type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
						shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
						shadowColor: "#fff", //阴影颜色。支持的格式同color。
					}
				},
				axisTick: { // 刻度(线)样式。
					show: true, // 是否显示刻度(线),默认 true。
					splitNumber: 5, // 分隔线之间分割的刻度数,默认 5。
					length: 8, // 刻度线长。支持相对半径的百分比,默认 8。
					lineStyle: { // 刻度线样式。	
						color: "#eee", //线的颜色,默认 #eee。
						opacity: 1, //图形透明度。支持从 0 到 1 的数字，为 0 时不绘制该图形。
						width: 1, //线度,默认 1。
						type: "solid", //线的类型,默认 solid。 此外还有 dashed,dotted
						shadowBlur: 10, //(发光效果)图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果。 
						shadowColor: "#fff", //阴影颜色。支持的格式同color。
					},
				},
				axisLabel: { // 刻度标签。
					show: false, // 是否显示标签,默认 true。
				},
				
				title: { // 仪表盘标题。
					show: false, // 是否显示标题,默认 true。
				},
				detail: { // 仪表盘详情，用于显示数据。
					show: false, // 是否显示详情,默认 true。
				
				}
			}
			
		]
	};
}
let myStyle = {
	normal: {
		color: '#f76767',
		label: {
			show: true,
			position: 'center',
			formatter: '{d}%',
			textStyle: {
				fontSize: '16',
				fontWeight: 'bold',
			}
		}
	}
};
let unStyle = {
	normal: {
		color: '#bcbcbc',
		label: {
			show: true,
			position: 'center',
			formatter: '{d}%',
			textStyle: {
				fontSize: '16',
				fontWeight: 'bold',
			}
		},
	}
}

function defaultDraw() {
	return {
		xAxis: {
			type: 'category',
			data: ['', '', '', '', '', '', '']
		},
		yAxis: {
			type: 'value',
			min: 0,
			name: '数量',
			minInterval: 1,
			max: 5,
			splitLine: { //网格线
				show: true,
				lineStyle: {
					type: 'dotted' //设置网格线类型 dotted：虚线  solid:实线
				},
			},
			axisLine: {
				lineStyle: {
					color: '#BFBFBF', //设置Y轴颜色
				}
			},
			axisLabel: { //坐标轴刻度标签的相关设置
				textStyle: {
					color: '#666',
					formatter: '{value} 件'
				}
			},
			boundaryGap: [0.2, 0.2]
		},
		series: [{
			data: [0, 0, 0, 0, 0, 0, 0],
			type: 'bar',

		}]
	};
}
